<?php

use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
use mail\PHPMailer;
use app\common\exception\BaseException;

/**
 * 生成token
 *
 * @param $id
 * @param $out_time
 * @return false|string
 */
function create_token($id,$out_time){
    return substr(md5($id.$out_time),5,26);
}


/**
 * 获取全局唯一标识符
 * @param bool $trim
 * @return string
 */
function getGuidV4($trim = true)
{
    // Windows
    if (function_exists('com_create_guid') === true) {
        $charid = com_create_guid();
        return $trim == true ? trim($charid, '{}') : $charid;
    }
    // OSX/Linux
    if (function_exists('openssl_random_pseudo_bytes') === true) {
        $data = openssl_random_pseudo_bytes(16);
        $data[6] = chr(ord($data[6]) & 0x0f | 0x40);    // set version to 0100
        $data[8] = chr(ord($data[8]) & 0x3f | 0x80);    // set bits 6-7 to 10
        return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
    }
    // Fallback (PHP 4.2+)
    mt_srand((double)microtime() * 10000);
    $charid = strtolower(md5(uniqid(rand(), true)));
    $hyphen = chr(45);                  // "-"
    $lbrace = $trim ? "" : chr(123);    // "{"
    $rbrace = $trim ? "" : chr(125);    // "}"
    $guidv4 = $lbrace .
        substr($charid, 0, 8) . $hyphen .
        substr($charid, 8, 4) . $hyphen .
        substr($charid, 12, 4) . $hyphen .
        substr($charid, 16, 4) . $hyphen .
        substr($charid, 20, 12) .
        $rbrace;
    return $guidv4;
}
function getIP()
{
    if (getenv('HTTP_CLIENT_IP')) {
        $ip = getenv('HTTP_CLIENT_IP');
    } elseif (getenv('HTTP_X_FORWARDED_FOR')) {
        $ip = getenv('HTTP_X_FORWARDED_FOR');
    } elseif (getenv('HTTP_X_FORWARDED')) {
        $ip = getenv('HTTP_X_FORWARDED');
    } elseif (getenv('HTTP_FORWARDED_FOR')) {
        $ip = getenv('HTTP_FORWARDED_FOR');

    } elseif (getenv('HTTP_FORWARDED')) {
        $ip = getenv('HTTP_FORWARDED');
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

function getusercount($id)
{
    $count = db('user')->where(['parentid' => $id, 'power' => '1'])->count();
    return $count;
}

function getvipcount($id)
{
    $count = db('user')->where(['parentid' => $id, 'power' => '2'])->count();
    return $count;
}

function getRandomString($len, $chars = null, $type = false)
{

    if ($type == true) {
        $authnum = rand('100000', '999999');
        $count = db('user')->where('share_ma', $authnum)->count();
        if ($count > 0 || in_array($authnum, ['111111', '222222', '333333', '444444', '555555', '666666', '777777', '888888', '999999', '000000', '123456', '654321'])) {
            $authnum = getRandomString($len, $chars, $type);
        }
    } else {
        srand((double)microtime() * 1000000);//create a random number feed.
        $ychar = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
        //$ychar="0,1,2,3,4,5,6,7,8,9";
        $list = explode(",", $ychar);
        $authnum = '';
        for ($i = 0; $i < 6; $i++) {
            $randnum = rand(0, 35); // 10+26;
            $authnum .= $list[$randnum];
        }
    }


    return $authnum;

}

function randstring($len)
{
    // $str='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    $str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    $randStr = str_shuffle($str);        //打乱字符串
    //$rands= md5(time().$randStr);
    $rands = $randStr;

    $field = substr($rands, 0, $len);   //substr(string,start,length);返回字符串的一部

    $prefix = db('advert')->where('id', 28)->value('content');

    $Splicing = $prefix . $field;

    return $Splicing;

}

function ik2021($len)
{
    // $str='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    $str = 'ik2021' . $len;
    $randStr = base64_encode($str);        //打乱字符串
    //$rands= md5(time().$randStr);
    $ik2021 = explode("aWsyMDIxey", $randStr);
    return $ik2021[1];

}


function SecurityVerificationKey($uid, $gettime)
{
    //$rands= md5(time().$randStr);
    $KeyOperation = $uid + $gettime;

    $RyanKeyMd5 = md5($KeyOperation);

    return $RyanKeyMd5;

}
/**
 * 输出错误信息
 * @param string $message 报错信息
 * @param int|null $status 状态码,默认为配置文件status.error
 * @param array $data 附加数据
 * @throws BaseException
 */
function throwError(string $message, $status = null, array $data = [])
{
    is_null($status) && $status = config('status.error');
    throw new BaseException(['status' => $status, 'msg' => $message, 'data' => $data]);
}

// 应用公共文件
function name()
{
    $id = session('user');
    $nick_name = db('user')->where('id', $id)->value('nick_name');
    if (empty($nick_name)) {

        $name = db('user')->where('id', $id)->value('username');

    } else {

        $name = $nick_name;

    }


    return $name ? $name : '无数据';
}

function _name($id)
{
    $name = db('user')->where('id', $id)->value('username');
    return $name ? $name : '无数据';
}

function sname($id, $name)
{
    $name = db('user')->where('id', $id)->value($name);
    return $name ? $name : '无数据';
}

function id()
{
    $id = session('user');

    return $id;

}

function power()
{
    $id = session('user');
    $name = db('user')->where('id', $id)->value('power');
    if ($name == '1') {
        return '代理';
    } else {
        return '管理员';
    }
}


function advert($id = null)
{
    if ($id != null) {
        $name = db('advert')->where('id', $id)->value('content');
    } else {
        $name = db('advert')->where('id', 1)->value('content');
    }
    return $name;
}


function Ryan_name()
{

    $Ryan_name = db('advert')->where('id', 21)->value('content');
    return $Ryan_name;
}


function Ryan_logo()
{
    $is_Ryan_logo = db('advert')->where('id', 114)->value('content');   //LOGO是否设置
    if (empty($is_Ryan_logo)) {
        $Ryan_logo = '';   //LOGO未填写
    } else {
        $Ryan_logo = $is_Ryan_logo;   //LOGO
    }

    return $Ryan_logo;
}


function Ryan_user_logo()
{

    $id = session('user');
    $is_Ryan_user_logo = db('user')->where('id', $id)->value('headimgurl');  // 头像是否设置
    if (empty($is_Ryan_user_logo)) {
        $Ryan_user_logo = '';   //LOGO未填写
    } else {
        $Ryan_user_logo = $is_Ryan_user_logo;   //LOGO
    }

    return $Ryan_user_logo;
}


function gui($id)
{
    $name = db('user')->where('id', $id)->value('username');
    return $name;
}


function gui_nickname($id)
{
    $nick_name = db('user')->where('id', $id)->value('nick_name');
    if ($nick_name == '') {

    } else {
        return ' || ' . $nick_name;
    }

}


function yue()
{
    $id = session('user');
    $power = session('power');
    if ($power == '1') {
        $where['id'] = $id;
    } else {
        $where = '';
        return '';
    }
    $name = db('user')->where($where)->value('money');
    return '当前余额:' . $name;
}

function share()
{
    $id = session('user');
    $power = session('power');
    if ($power == '1') {
        $where['id'] = $id;
    } else {
        $where = '';
        return '';
    }
    $name = db('user')->where($where)->value('share_ma');
    return '分享码:' . $name;
}


function randstring_agent($uid)
{
    // $str='ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    $str = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    $randStr = str_shuffle($str);        //打乱字符串
    //$rands= md5(time().$randStr);
    $rands = $randStr;
    $len = '8';
    $field = substr($rands, 0, $len);   //substr(string,start,length);返回字符串的一部

    $prefix = db('advert')->where('id', 28)->value('content');

    $Splicing = $uid . $field;

    return $Splicing;

}

// 发送邮件函数 - 激活码		
function sendEmail_agent($code, $toemail)
{
//    echo $desc_content;
//    echo $toemail;
    //   echo count($content);
    //   dump($content);


//  dump($result);
    //echo $data;
    // return;


    $body = '你好,您本次登录的的验证码是：<b>' . $code . '</b><br>';


    $mail = new PHPMailer();
    $mail->isSMTP();// 使用SMTP服务
    $mail->CharSet = "utf8";// 编码格式为utf8，不设置编码的话，中文会出现乱码
    $mail->Host = advert('400');// 发送方的SMTP服务器地址
    $mail->SMTPAuth = true;// 是否使用身份验证
    $mail->Username = advert('402');// 发送方的163邮箱用户名，就是你申请163的SMTP服务使用的163邮箱</span><span style="color:#333333;">
    $mail->Password = advert('403');// 发送方的邮箱密码，注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码！</span><span style="color:#333333;">
    $mail->SMTPSecure = "ssl";// 使用ssl协议方式
    $mail->Port = advert('401');// 163邮箱的ssl协议方式端口号是465/994
    $mail->setFrom(advert('402'), advert('374'));// 设置发件人信息，如邮件格式说明中的发件人，这里会显示为Mailer(xxxx@163.com），Mailer是当做名字显示
    $mail->addAddress($toemail, '回复消息');// 设置收件人信息，如邮件格式说明中的收件人，这里会显示为Liang(yyyy@163.com)
    $mail->addReplyTo(advert('402'), "Reply");// 设置回复人信息，指的是收件人收到邮件后，如果要回复，回复邮件将发送到的邮箱地址
    $mail->IsHTML(true); //支持html格式内容
    //$mail->addCC("xxx@163.com");// 设置邮件抄送人，可以只写地址，上述的设置也可以只写地址(这个人也能收到邮件)
    //$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件)
    //$mail->addAttachment("bug0.jpg");// 添加附件
    $mail->Subject = "代理登录验证码：";// 邮件标题
    // $mail->Body = "以下是博客博主回复你的内容:".$content." 点击可以查看文章地址:".$desc_url;	// 邮件正文
    //	$mail->msgHTML($content);
    $mail->Body = $body; //邮件主体内容
    $mail->AltBody = "您的邮箱可能不支持当前操作";// 这个是设置纯文本方式显示的正文内容，如果不支持Html方式，就会用到这个，基本无用

    if (!$mail->send()) {// 发送邮件
        //    echo 22;
        return $mail->ErrorInfo;
        // echo "Message could not be sent.";
        // echo "Mailer Error: ".$mail->ErrorInfo;// 输出错误信息
    } else {
        return 1;
    }
}


// 发送邮件函数 - 激活码
function sendEmail($content, $toemail, $username, $number, $name, $ctime)
{
//    echo $desc_content;
//    echo $toemail;
    //   echo count($content);
    //   dump($content);


    foreach ($content as $value) {

        $data[] = $value['dianka'];
    }


    $result = implode("</hr>", $data);
//  dump($result);  
    //echo $data;
    // return;


    $time_s = date("Y-m-d H:i:s", $ctime);

    $body = '你好：<b>' . $username . '</b><br>
            		 数量：<b>' . $number . '</b><br>
            		 类型：<b>' . $name . '</b><br>
            		 批次：<b>' . $ctime . '</b><br>
            		 生成时间：<b>' . $time_s . '</b><br>
                     <br><br></hr>' . $result . '</hr><br><br>';


    $mail = new PHPMailer();
    $mail->isSMTP();// 使用SMTP服务
    $mail->CharSet = "utf8";// 编码格式为utf8，不设置编码的话，中文会出现乱码
    $mail->Host = advert('400');// 发送方的SMTP服务器地址
    $mail->SMTPAuth = true;// 是否使用身份验证
    $mail->Username = advert('402');// 发送方的163邮箱用户名，就是你申请163的SMTP服务使用的163邮箱</span><span style="color:#333333;">
    $mail->Password = advert('403');// 发送方的邮箱密码，注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码！</span><span style="color:#333333;">
    $mail->SMTPSecure = "ssl";// 使用ssl协议方式
    $mail->Port = advert('401');// 163邮箱的ssl协议方式端口号是465/994
    $mail->setFrom(advert('402'), advert('374'));// 设置发件人信息，如邮件格式说明中的发件人，这里会显示为Mailer(xxxx@163.com），Mailer是当做名字显示
    $mail->addAddress($toemail, '回复消息');// 设置收件人信息，如邮件格式说明中的收件人，这里会显示为Liang(yyyy@163.com)
    $mail->addReplyTo(advert('402'), "Reply");// 设置回复人信息，指的是收件人收到邮件后，如果要回复，回复邮件将发送到的邮箱地址
    $mail->IsHTML(true); //支持html格式内容
    //$mail->addCC("xxx@163.com");// 设置邮件抄送人，可以只写地址，上述的设置也可以只写地址(这个人也能收到邮件)
    //$mail->addBCC("xxx@163.com");// 设置秘密抄送人(这个人也能收到邮件)
    //$mail->addAttachment("bug0.jpg");// 添加附件
    $mail->Subject = "激活码导出 批次：" . $ctime;// 邮件标题
    // $mail->Body = "以下是博客博主回复你的内容:".$content." 点击可以查看文章地址:".$desc_url;	// 邮件正文
    //	$mail->msgHTML($content);
    $mail->Body = $body; //邮件主体内容
    $mail->AltBody = "您的邮箱可能不支持当前操作";// 这个是设置纯文本方式显示的正文内容，如果不支持Html方式，就会用到这个，基本无用

    if (!$mail->send()) {// 发送邮件
        //    echo 22;
        return $mail->ErrorInfo;
        // echo "Message could not be sent.";
        // echo "Mailer Error: ".$mail->ErrorInfo;// 输出错误信息
    } else {
        return 1;
    }
}

?>